#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
  umask(0);

  if(fork()>0){
    //father
    exit(0);
  }
  signal(SIGCHLD, SIG_IGN);
  setsid();

  //不是必须的，防御性编程
  if(fork() > 0){
    //father
    exit(0);
  }
  
  chdir("/"); //可选的选项
  //孙子进程
  close(0);

  int fd = open("/dev/null", O_RDWR);
  if(fd < 0){
    return ; // ???
  }
  dup2(fd,1);
  dup2(fd,2);
  while(1);
  return 0;
}
